package 剑指offer;

/**
 * @description: 以字符串的形式读入两个数字，编写一个函数计算它们的和，以字符串形式返回。
 * （字符串长度不大于100000，保证字符串仅由'0'~'9'这10种字符组成）
 * @author: ywk
 * @date: 2021-02-03
 */
public class 大数之和 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     * 计算两个数之和
     *
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public static String solve(String s, String t) {
        // write code here
        int a = s.length();
        int b = t.length();
        char[] max = null;
        char[] min = null;
        if (a > b) {
            max = s.toCharArray();
            min = t.toCharArray();
        } else {
            min = s.toCharArray();
            max = t.toCharArray();
        }
        StringBuilder sb = new StringBuilder();
        int remain = 0;
        for (int i = 0; i < max.length; i++) {
            int indexMax = max.length - 1 - i;
            int indexMin = min.length - 1 - i;
            int v1 = Integer.parseInt(String.valueOf(max[indexMax]));
            int v2 = 0;
            if (indexMin >= 0) {
                v2 = Integer.parseInt(String.valueOf(min[indexMin]));
            }
            int sum = v1 + v2 + remain;
            if (sum / 10 > 0) {
                remain = sum / 10;
                sb.append(sum % 10);
            } else {
                remain = 0;
                sb.append(sum);
            }
        }
        if (remain != 0) {
            sb.append(remain);
        }
        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        System.out.println(solve("999", "0"));
    }
}
